package com.ruoyi.trainingManagement.service;

import java.util.List;

import com.ruoyi.trainingManagement.domain.Vo.StudentTrainingProgramCoursesVo;
import com.ruoyi.trainingManagement.domain.trainingProgram;
import com.ruoyi.trainingManagement.domain.trainingProgramCourses;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

/**
 * 培养计划课程明细Service接口
 * 
 * @author chenxl
 * @date 2025-04-16
 */
public interface ItrainingProgramCoursesService 
{
    /**
     * 查询培养计划课程明细
     * 
     * @param id 培养计划课程明细主键
     * @return 培养计划课程明细
     */
    public trainingProgramCourses selecttrainingProgramCoursesById(String id);

    /**
     * 查询培养计划课程明细列表
     * 
     * @param trainingProgramCourses 培养计划课程明细
     * @return 培养计划课程明细集合
     */
    public List<trainingProgramCourses> selecttrainingProgramCoursesList(trainingProgramCourses trainingProgramCourses);

    /**
     * 新增培养计划课程明细
     * 
     * @param trainingProgramCourses 培养计划课程明细
     * @return 结果
     */
    public int inserttrainingProgramCourses(trainingProgramCourses trainingProgramCourses);

    /**
     * 修改培养计划课程明细
     * 
     * @param trainingProgramCourses 培养计划课程明细
     * @return 结果
     */
    public int updatetrainingProgramCourses(trainingProgramCourses trainingProgramCourses);

    /**
     * 批量删除培养计划课程明细
     * 
     * @param ids 需要删除的培养计划课程明细主键集合
     * @return 结果
     */
    public int deletetrainingProgramCoursesByIds(String[] ids);

    /**
     * 删除培养计划课程明细信息
     * 
     * @param id 培养计划课程明细主键
     * @return 结果
     */
    public int deletetrainingProgramCoursesById(String id);

    public List<trainingProgramCourses> selecttrainingProgramCoursesByTrainingProgramId(String trainingProgramId);

    /**
     * 批量增加培养计划课程明细
     * @param trainingProgramCoursesList 课程明细列表
     * @return 影响的行数
     */
    public int batchInsertTrainingProgramCourses(List<trainingProgramCourses> trainingProgramCoursesList);

    /**
     * 批量更新培养计划课程的状态、班级数量和最大人数
     * @param trainingProgramList 培养计划列表
     * @param courseId 课程ID
     * @param numberClasses 班级数量
     * @param numberStudents 班级最大人数
     * @return 成功更新的记录数
     */
    @Transactional(rollbackFor = Exception.class)
    int updateByProgramAndCourseId(List<trainingProgram> trainingProgramList,
                                   String courseId,
                                   Integer numberClasses,
                                   Integer numberStudents);

    /**
     * 根据培养方案ID和课程ID查询对应的培养方案课程ID
     * @param trainingProgramIds 培养方案ID
     * @param courseId 课程ID
     * @return 培养方案课程ID（training_program_courses表的id）
     */
    List<String> selectIdsByProgramIdsAndCourseId(List<String> trainingProgramIds, String courseId);

    /**
     * 根据培养方案ID查询StudentTrainingProgramCoursesVo
     * @param trainingProgramId 培养方案ID
     *
     * @return StudentTrainingProgramCoursesVo
     */

    public List<StudentTrainingProgramCoursesVo> selectStudentTrainingProgramCoursesVoByTrainingProgramId(String trainingProgramId);

    boolean checkAllProgramsCourseApproved();

    int updateStatusById(String id, int status);

    List<trainingProgramCourses> selectByStatusList(List<Integer> statusList);

    //根据学院列表获取对应的全部培养方案课程列表
    List<trainingProgramCourses> selectCoursesByCollegeIds(List<String> collegeIds);

    //根据学院代码列表获取对应全部培养方案课程列表
    List<trainingProgramCourses> selectCoursesByCollegeCodes(List<String> collegeCodes);

    //根据学院ID列表联查培养方案课程列表
    List<trainingProgramCourses> selectTrainingProgramCoursesByCollegeIds(List<String> collegeIds);
}
